home *** CD-ROM | disk | FTP | other *** search
-
- #ifndef __ABSTRACTDATA__
- #define __ABSTRACTDATA__
-
- //
- // For "Boolean" (pity we need to include this file...)
- //
- #include <Types.h>
-
- //
- // Enumerations for comparison results
- //
- enum CompareEnumeration
- {
- kSecondObjectComesBefore = -1,
- kObjectKeysEqual,
- kSecondObjectComesAfter,
- kCantCompare
- };
-
- enum
- {
- kAnyType = '****'
- };
-
- class TAbstractDataReference;
- class TConstDataReference;
-
- //
- // This is our version of memcpy--use the best
- // memory copying routine for the platform
- // (e.g. BlockMoveData)
- //
- void CopyMemory(const void *srcPtr, void *destPtr, SInt32 byteCount);
-
- //================================================================================
- // Class TAbstractCompareBehavior
- //================================================================================
-
- class TAbstractCompareBehavior
- {
- private:
- TAbstractCompareBehavior* fNextBehavior;
-
- public:
- TAbstractCompareBehavior();
- ~TAbstractCompareBehavior() { delete fNextBehavior; }
-
- void SetNextBehavior(TAbstractCompareBehavior* nextBehavior) { fNextBehavior = nextBehavior; }
-
- virtual CompareEnumeration CompareDynamicBehavior(const TAbstractDataReference& object1, const TAbstractDataReference& object2) const;
- virtual Boolean ContainsDynamicBehavior(const TAbstractDataReference& object1, const TAbstractDataReference& object2) const;
- };
-
-
- //================================================================================
- // Class TAbstractDataReference
- //================================================================================
-
- class TAbstractDataReference
- {
- private:
- static TAbstractCompareBehavior* fFirstBehavior;
-
- public:
- TAbstractDataReference();
- virtual ~TAbstractDataReference();
-
- //
- // Data accessibility methods:
- //
- virtual Boolean DirectlyReadable() const;
- virtual Boolean Writable() const;
- virtual Boolean DirectlyWritable() const;
- virtual Boolean Resizable() const;
-
- //
- // Read-access methods:
- //
- virtual SInt32 DataType() const = 0;
- virtual SInt32 DataLength() const = 0;
- virtual SInt32 MaxLength() const;
-
- virtual SInt32 CopyTo(char* destination, SInt32 maxBytesToCopy) const;
-
- //
- // Write-access methods:
- //
- virtual Boolean SetDataType(SInt32 newType);
- virtual SInt32 SetDataLength(SInt32 newLength);
- virtual Boolean CopyFrom(const TAbstractDataReference& source, Boolean allowDataToClip = false);
- virtual Boolean Resize(SInt32 newSize);
-
- //
- // Direct-access methods:
- //
- virtual const char* Data() const;
- virtual char* Data();
-
- //
- // Data-comparison methods
- //
- CompareEnumeration Compare(const TAbstractDataReference& object2) const;
- Boolean Contains(const TAbstractDataReference& object2) const;
-
- //
- // Static methods of TAbstractDataReference
- //
- static void AddCompareBehavoir(TAbstractCompareBehavior* behavior);
-
- static CompareEnumeration Compare(const TAbstractDataReference& object1, const TAbstractDataReference& object2);
- static CompareEnumeration CompareDefaultBehavior(const TAbstractDataReference& object1, const TAbstractDataReference& object2);
-
- static Boolean ContainsDefaultBehavior(const TAbstractDataReference& object1, const TAbstractDataReference& object2);
- };
-
- //================================================================================
- // Class TConstDataReference
- //================================================================================
-
- class TConstDataReference : public TAbstractDataReference
- {
- protected:
- SInt32 fDataType;
- const char* fData;
- SInt32 fDataLength;
-
- public:
- TConstDataReference(SInt32 dataType, const char* data, SInt32 dataLength) : fDataType(dataType), fData((char*)data), fDataLength(dataLength) {}
- TConstDataReference(const TAbstractDataReference& data) : fDataType(data.DataType()), fData(data.Data()), fDataLength(data.DataLength()) {}
-
- virtual Boolean DirectlyReadable() const;
-
- virtual SInt32 DataType() const;
- virtual SInt32 DataLength() const;
-
- SInt32 CopyTo(char* destination, SInt32 maxBytesToCopy) const;
-
- virtual const char* Data() const;
- };
-
- //================================================================================
- // Class TUpdataDataReference
- //================================================================================
-
- class TUpdataDataReference : public TConstDataReference
- {
- private:
- SInt32 fMaxLength;
-
- public:
- TUpdataDataReference(SInt32 dataType, char* data, SInt32 dataLength, SInt32 maxLength) : TConstDataReference(dataType, data, dataLength), fMaxLength(maxLength) {}
-
- virtual Boolean Writable() const;
- virtual Boolean DirectlyWritable() const;
-
- virtual char* Data();
- virtual SInt32 MaxLength() const;
-
- virtual Boolean SetDataType(SInt32 newType);
- virtual SInt32 SetDataLength(SInt32 newLength);
-
- virtual Boolean CopyFrom(const TAbstractDataReference& source, Boolean allowDataToClip = false);
-
- };
-
- //================================================================================
- // Class TTransientDataReference
- //================================================================================
-
- class TTransientDataReference : public TConstDataReference
- {
- protected:
- Boolean fAllocatedData;
-
- public:
- TTransientDataReference(SInt32 dataType, const char* data, SInt32 dataLength) : TConstDataReference(dataType, (char*)data, dataLength), fAllocatedData(false) {}
- TTransientDataReference(const TAbstractDataReference& data);
- virtual ~TTransientDataReference();
- };
-
- #endif
-